<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>姓名案例-插值语法实现</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
        姓：<input type="text" v-model:value="fn"><br><br>
        名：<input type="text" v-model:value="ln"><br><br>
        不依赖的属性：<input type="text" v-model:value="x"><br><br>
        全名：<span>{{fullName}}</span><br>
        全名：<span>{{fullName}}</span><br>
        全名：<span>{{fullName}}</span><br><!--即使有多个模板使用计算属性，get也只会被调用1次-->
    </div>
    <script>
        Vue.config.productionTip = false

        let vm = new Vue({
            el: "#root", 
            data: { //data内的所有数据都被认为是vue的属性
                fn: "张",
                ln: "三",
                x: ""
            },
            computed:{ //计算属性：用已有的数据计算后获得新的属性，也会被放到vm中
                fullName: {
                    //当有人第一次读取fullName时，就会调用get，并获取返回值
                    //get的返回值有缓存，当所依赖数据发生变化时，也会调用get
                    get(){
                        console.log('get被调用了')
                        console.log(this) //get中的this也是vm
                        return this.fn.slice(0,3) + '-' + this.ln
                    },
                    //set不是必须的，当需要修改计算属性时才需要
                    set(val) {
                        //当fullName被修改时自动调用set，计算属性没有真正的值，所以修改也是改它依赖的属性
                        console.log('set被调用了')
                        arr = val.split('-')
                        this.fn = arr[0]
                        this.ln = arr[1]
                        
                        //测试时在F12控制台输入vm.fullName='李-四'
                    }
                }
            }
        })

    </script>
</body>
</html>